package conditions.operators

import conditions.BooleanNode
import values.Variable

class GreaterThan extends BooleanNode {

   /**
   * Referencias a variables o parametros de los cuales voy a obtener el valor.
   */
   Variable v1
   Variable v2
   
   
   public GreaterThan() {}
   
   /**
    * Para cuando se compara con una constante.
    */
   //Object value
   public GreaterThan(Variable v1, Variable v2)
   {
      this.v1 = v1
      this.v2 = v2
   }
   
   @Override
   public boolean evaluate()
   {  
      //println "  " + v1.value + " gt " + v2.value
      
      // Los valores deben ser Comparable, sino no puedo hacer el equals
      if (v1.value instanceof Comparable && v2.value instanceof Comparable)
      {
         println "  " + v1.value + " gt " + v2.value
         return v1.value.compareTo(v2.value) > 0
      }
      
      throw new Exception('ambos valores deben ser comparables '+
         v1.value + ' '+
         v2.value ) // + '('+ v1.value.class +')')
   }
   
   /**
   * Necesario para implementar el clone
   */
   boolean equals(Object other)
   {
      other instanceof EqualsNode && this.v1.equals(other.v1) && this.v2.equals(other.v2)
   }
}